package com.example.lib.c2.pc1;

/**
 * 资源容器
 */
class Res {

    //多个线程同时操作这个id
    private int id;

    public void put() {
        id += 1;
        System.out.println(Thread.currentThread().getName() + "生产者 生产了：" + this.id);
    }

    public void out() {
        System.out.println(Thread.currentThread().getName() + "》》》》》》》消费者 消费了：" + this.id);
        id -= 1;
    }
}

/**
 * 生产者
 */
class ProduceRunnable implements Runnable {

    private Res res;

    public ProduceRunnable(Res res) {
        this.res = res;
    }

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            res.put();
        }
    }
}

/**
 * 消费者
 */
class ConsumeRunnable implements Runnable {

    private Res res;

    public ConsumeRunnable(Res res) {
        this.res = res;
    }

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            res.out();
        }
    }
}


public class PcDemo {

    public static void main(String[] args) {

        //创建资源
        Res res = new Res();
        //创建生产者和消费者，他们都公用同一个资源对象
        ProduceRunnable produceRunnable = new ProduceRunnable(res);
        ConsumeRunnable consumeRunnable = new ConsumeRunnable(res);
        //分别启动生产者和消费者
        new Thread(produceRunnable).start();
        new Thread(consumeRunnable).start();

        //结果如下
        /*
        Thread-1》》》》》》》消费者 消费了：1
        Thread-0生产者 生产了：1
        Thread-1》》》》》》》消费者 消费了：0
        Thread-0生产者 生产了：1
         */
    }
}
